/* 01B_DEF_dataset.do             KTS/DCC/NLB              yyyy-mm-dd:2026-02-04
----|----1----|----2----|----3----|----4----|----5----|----6----|----7----|----8

This do file creates the data used in the paper "Estimating Inter­generational
Returns to Medical Care: New Evidence from At­Risk Newborns" written by
Damian Clarke, Nicolas Lillo Bustos and Kathya Tapia-Schythe.  
In certain cases these results will require the user-written, labutil,
personage commands. 
*/

clear all
set more off

*-------------------------------------------------------------------------------
*--- 1. Data manipulation: Variable names and labels 
*-------------------------------------------------------------------------------

* Import data (original .csv is 1.3gb, so this step may take a while depending
* on your system)
import delimited "$rawdefcsv", ///
	delimiter(";") case(preserve)  bindquote(strict) ///
	encoding(windows-1252) stringcols(_all) clear
	
destring $dyear_var, gen(temp_dyear)
sum temp_dyear
scalar min_ano_def = r(min)
scalar max_ano_def = r(max)
drop temp_dyear

* Label variables:
label var ID_FALLECIDO	"Identificador único y anónimo de la persona fallecida"
label var DIA_DEF	"Día de la fecha de defunción"
label var MES_DEF	"Mes de la fecha de defunción"
label var ANO_DEF	"Año de la fecha de defunción"
label var FECHA_DEF	"DIA_DEF + MES_DEF + ANO_DEF. Fecha de defunción"
label var SEXO	"Código que identifica el sexo biológico"
label var GLOSA_SEXO	"Glosa que identifica el sexo"
label var DIA_NAC	"Día de la fecha de nacimiento del fallecido"
label var MES_NAC	"Mes de la fecha de nacimiento del fallecido"
label var ANO_NAC	"Año de la fecha de nacimiento del fallecido"
label var FECHA_NACIMIENTO	"DIA_NAC + MES_NAC + ANO1_NAC + ANO2_NAC. Fecha de Nacimiento"
label var EDAD_CANT	"Edad cantidad: es la cifra de la edad, esta depende de la unidad en que esté medida"
note EDAD_CANT: Etiqueta completa: Edad cantidad: es la cifra de la edad, esta depende de la unidad en que esté medida (edad_tipo: años, meses, días, horas)"
label var EDAD_TIPO	"Tipo de edad : es la unidad en la que se mide la edad: años, meses, días, horas"
label var GLOSA_EDAD_TIPO	"Glosa tipo de edad"
label var EST_CIVIL	"Código del Estado Civil del fallecido"
label var GLOSA_EST_CIVIL	"Glosa del Estado Civil "
label var CURSO_INS	"Último curso aprobado por la persona fallecida"
label var NIVEL_INS	"Código del nivel de instrucción del fallecido"
note NIVEL_INS: Etiqueta completa: Código del nivel de instrucción del fallecido: indica el Nivel educacional de la persona fallecida según lo indicado en el certificado médico de defunción.
label var GLOSA_NIVEL_INS	"Glosa del nivel de instrucción"
label var ACTIVIDAD	"Código para la condición de actividad"
label var GLOSA_ACTIVIDAD	"Glosa del código de actividad"
label var OCUPACION	"Código de la ocupación. El dato está condicionado al dato de la actividad."
label var GLOSA_OCUPACION	"Glosa del código de ocupación, el cual depende de la variable ACTIVIDAD."
note GLOSA_OCUPACION: Etiqueta completa: Glosa del código de ocupación, el cual depende de la variable ACTIVIDAD. La ocupación se basa en los Grandes Grupos de Actividad de la CIUO 88.
label var CATEGORIA	"Código de la categoría ocupacional."
note CATEGORIA: Etiqueta completa: Código de la categoría ocupacional. El valor está condicionado al dato de la actividad.
label var GLOSA_CATEGORIA	"Glosa del código de la categoría"
label var ANO_INSCR	"Año de la fecha de inscripción de la defunción"
label var LOCAL_DEF	"Código del lugar ocurrencia de la defunción"
label var GLOSA_LOCAL_DEF	"Describe el lugar donde ocurre la defuncón"
label var REG_RES	"Código de la región de residencia del fallecido"
label var GLOSA_REG_RES	"Glosa de la región de residencia"
label var SERV_RES	"Código del Servicio de Salud de residencia del fallecido"
label var GLOSA_SERV_RES	"Glosa del servicio de salud de residencia"
label var COMUNA	"Código de la comuna de residencia del fallecido"
label var GLOSA_COMUNA_RESIDENCIA	"Glosa de la comuna de residencia"
label var URBANO_RURAL	"Residencia de la persona fallecida: Urbano/Rural"
note URBANO_RURAL: Etiqueta completa: Código para definir la zona Urbano o Rural de la residencia de la persona fallecida
label var DIAG1	"Causa básica de defunción en caso de muertes por enfermedades."
note DIAG1: Etiqueta completa: Causa básica de defunción en caso de muertes por enfermedades. En el caso de las muertes por causas externas el DIAG1 corresponde a la naturaleza de la lesión y comprende los cógidos que empiezan con letras S y T. (Desde 1997 se comienza a codificar con la CIE 10)
label var GLOSA_SUBCATEGORIA_DIAG1	"Glosa causa básica de defunción en caso de muertes por enfermedades."
note GLOSA_SUBCATEGORIA_DIAG1: Etiqueta completa: Glosa causa básica de defunción en caso de muertes por enfermedades. En el caso de las muertes por causas externas el DIAG1 corresponde a la naturaleza de la lesión y comprende los cógidos que empiezan con letras S y T. (Desde 1997 se comienza a codificar con la CIE 10)
label var CODIGO_CATEGORIA_DIAG1	"Código causa básica de defunción en caso de muertes por enfermedades."
note CODIGO_CATEGORIA_DIAG1: Etiqueta completa: Código causa básica de defunción en caso de muertes por enfermedades. En el caso de las muertes por causas externas el DIAG1 corresponde a la naturaleza de la lesión y comprende los cógidos que empiezan con letras S y T. (Desde 1997 se comienza a codificar con la CIE 10)
label var GLOSA_CATEGORIA_DIAG1	"Glosa del código causa básica de defunción en caso de muertes por enfermedades."
note GLOSA_CATEGORIA_DIAG1: Etiqueta completa: Glosa del código causa básica de defunción en caso de muertes por enfermedades. En el caso de las muertes por causas externas el DIAG1 corresponde a la naturaleza de la lesión y comprende los cógidos que empiezan con letras S y T. (Desde 1997 se comienza a codificar con la CIE 10)
label var CODIGO_GRUPO_DIAG1	"Código grupo DIAG1 según CIE10"
label var GLOSA_GRUPO_DIAG1	"Glosa código grupo DIAG1 según CIE10"
label var CAPITULO_DIAG1	"Capitulo CIE10 según DIAG1"
label var GLOSA_CAPITULO_DIAG1	"Glosa capitulo CIE10 según DIAG1"
label var DIAG2	"Causa externa de defunción."
note DIAG2: Etiqueta completa: Causa externa de defunción. (Desde 1997 se comienza a codificar con la CIE 10), corresponde a los códigos CIE-10  de la V a la Y
label var GLOSA_SUBCATEGORIA_DIAG2	"Glosa causa básica de defunción en caso de muertes por enfermedades."
note GLOSA_SUBCATEGORIA_DIAG2: Etiqueta completa: Glosa causa básica de defunción en caso de muertes por enfermedades. En el caso de las muertes por causas externas el DIAG2 corresponde a la naturaleza de la lesión y comprende los cógidos que empiezan con letras S y T. (Desde 1997 se comienza a codificar con la CIE 10)
label var CODIGO_CATEGORIA_DIAG2	"Código causa básica de defunción en caso de muertes por enfermedades."
note CODIGO_CATEGORIA_DIAG2: Etiqueta completa: Código causa básica de defunción en caso de muertes por enfermedades. En el caso de las muertes por causas externas el DIAG2 corresponde a la naturaleza de la lesión y comprende los cógidos que empiezan con letras S y T. (Desde 1997 se comienza a codificar con la CIE 10)
label var GLOSA_CATEGORIA_DIAG2	"Glosa del código causa básica de defunción en caso de muertes por enfermedades."
note GLOSA_CATEGORIA_DIAG2: Glosa del código causa básica de defunción en caso de muertes por enfermedades. En el caso de las muertes por causas externas el DIAG2 corresponde a la naturaleza de la lesión y comprende los cógidos que empiezan con letras S y T. (Desde 1997 se comienza a codificar con la CIE 10)
label var CODIGO_GRUPO_DIAG2	"Código grupo DIAG2 según CIE10"
label var GLOSA_GRUPO_DIAG2	"Glosa código grupo DIAG2 según CIE10"
label var CAPITULO_DIAG2	"Capitulo CIE10 según DIAG2"
label var GLOSA_CAPITULO_DIAG2	"Glosa capitulo CIE10 según DIAG2"
label var AT_MEDICA	"Código para identificar si tuvo atención médica"
label var GLOSA_AT_MEDICA	"Glosa Atención Médica"
label var CAL_MEDICO	"Código que identifica la calidad de quién certifica la defunción"
label var GLOSA_CAL_MEDICO	"Glosa de la calidad de quien certifica la defunción"
label var CER_MES	"Mes de la certificación médica"
label var CER_ANO	"Año de la certificación médica"
label var FUND_CAUSA	"Fundamento de la causa de muerte"
label var GLOSA_FUND_CAUSA	"Glosa del Fundamento de la causa de muerte"
label var COD_MENOR	"Código para identificar si el fallecido es menor de 1 año."
label var GLOSA_COD_MENOR	"Glosa del código que identifica si el fallecido es un menor de 1 año"
label var PESO	"Peso al nacer en gramos cuando se trata de muerte de menor de un año"
label var GESTACION	"Edad gestacional en semanas cuando se trata de muerte de menor de un año"
label var NUTRITIVO	"Estado nutritivo previo a la enfermedad (muerte de menor de un año)"
note NUTRITIVO: Etiqueta completa: Estado nutritivo previo a la enfermedad cuando se trata de muerte de menor de un año
label var GLOSA_NUTRITIVO	"Glosa estado nutitivo cuando se trata de muerte de menor de un año"
label var EDAD_MADRE	"Edad de la madre en años cuando se trata de muerte de menor de un año"
label var EST_CIV_MADRE	"Estado civil de la madre cuando se trata de muerte de menor de un año"
label var GLOSA_EST_CIV_MADRE	"Glosa del estado civil de la madre cuando se trata de muerte de menor de un año"
label var ACTIV_MADRE	"Actividad de la madre cuando se trata de muerte de menor de un año"
label var GLOSA_ACTIV_MADRE	"Glosa de la actividad de la madre cuando se trata de muerte de menor de un año"
label var OCUPA_MADRE	"Código ocupación madre cuando se trata de muerte de menor de un año."
note OCUPA_MADRE: Etiqueta completa: Código de la categoría ocupacional de la madre cuando se trata de muerte de menor de un año. El código está condicionado al  dato de la actividad
label var GLOSA_OCUPA_MADRE	"Glosa del ocupación madre cuando se trata de muerte de menor de un año"
note GLOSA_OCUPA_MADRE: Etiqueta completa: Glosa del Código de  ocupación de la madre está condicionado al código de la  actividad cuando se trata de muerte de menor de un año
label var CATEG_MADRE	"Código categoría ocupacional madre, por actividad, muerte de menor de un año."
note CATEG_MADRE: Etiqueta completa: Código categoría ocupacional de la madre. El código está condicionado al dato de la actividad.
label var GLOSA_CATEG_MADRE	"Glosa categoría ocupacional madre, por actividad, muerte de menor de un año."
note GLOSA_CATEG_MADRE: Etiqueta completa: Glosa del Código de la categoría ocupacional de la madre cuando se trata de muerte de menor de un año. El código está condicionado al  dato de la actividad
label var CURSO_MADRE	"Último curso de instrucción de la madre, muerte de menor de un año"
note CURSO_MADRE: Etiqueta completa: Último curso de instrucción de la madre cuando se trata de muerte de menor de un año
label var NIVEL_MADRE	"Código del nivel de instrucción cuando se trata de muerte de menor de un año"
label var GLOSA_NIVEL_MADRE	"Glosa del nivel de instrucción de la madre"
label var HIJ_VIVOS	"Número de hijos vivos cuando se trata de muerte de menor de un año"
label var HIJ_FALLECIDOS	"Número de hijos fallecidos cuando se trata de muerte de menor de un año"
label var HIJ_MORTINATOS	"Número de hijos mortinatos cuando se trata de muerte de menor de un año"
label var HIJ_TOTAL	"Número de Hijos total cuando se trata de muerte de menor de un año"
label var PARTO_ABORTO	"Parto o Aborto cuando se trata de muerte de menor de un año"
label var GLOSA_PARTO_ABORTO	"Glosa de parto o aborto cuando se trata de muerte de menor de un año"
label var DIA_PARTO	"Día del último parto o aborto cuando se trata de muerte de menor de un año"
label var MES_PARTO	"Mes del último parto o aborto cuando se trata de muerte de menor de un año"
label var ANO_PARTO	"Año del último parto o aborto cuando se trata de muerte de menor de un año"
label var FECHA_PARTO	"Fecha de nacimiento/parto cuando se trata de muerte de menor de un año"
label var EDAD_PADRE	"Edad del padre en años cuando se trata de muerte de menor de un año"
label var ACTIV_PADRE	"Actividad del padre cuando se trata de muerte de menor de un año"
label var GLOSA_ACTIV_PADRE	"Glosa de la actividad del padre cuando se trata de muerte de menor de un año"
label var OCUPA_PADRE	"Código de la ocupación del padre está condicionado al dato de la  actividad "
label var GLOSA_OCUPA_PADRE	"Texto ocupación del padre"
label var CATEG_PADRE	"Código de la categoría ocupacional del padre."
note CATEG_PADRE: Etiqueta completa: Código de la categoría ocupacional del padre. El código está condicionado al dato de la actividad.
label var GLOSA_CATEG_PADRE	"Glosa código categoría ocupacional padre, por actividad, muerte menor de un año."
note GLOSA_CATEG_PADRE: Etiqueta completa: Glosa del Código de la categoría ocupacional del padre cuando se trata de muerte de menor de un año. El código  está condicionado al dato de la  actividad
label var CURSO_PADRE	"Último curso de instrucción del padre."
label var NIVEL_PADRE	"Código del nivel de instrucción."
label var GLOSA_NIVEL_PADRE	"Glosa código del nivel de instrucción padre, muerte menor de un año"
note GLOSA_NIVEL_PADRE: Etiqueta completa: Glosa del Código del nivel de instrucción cuando se trata de muerte de menor de un año

	
/* FINAL THINGS */
* Compress, label, and metadata:
compress
label data "Defunciones `=min_ano_def'-`=max_ano_def' en Chile (DEIS/MINSAL)"
note: Last modified by: $id_user_full ($id_user_email)
note: Last modification timestamp: $S_DATE at $S_TIME
note: Fuente: https://deis.minsal.cl/#datosabiertos

* Save file:
save "${def_original}.dta", replace

* Save labels to do file:
* label save using "$labeldos/(auto)labels_${def_original}.do", replace

* Final report:
cls
describe, fullnames
notes _dta

*-------------------------------------------------------------------------------
*--- 2. Data cleaning 
*-------------------------------------------------------------------------------

use "${def_original}.dta", clear

*-------------------------------------------------
* Destring numeric variables without value labels:
*-------------------------------------------------

destring DIA_DEF MES_DEF ANO_DEF, replace
destring DIA_NAC MES_NAC ANO_NAC, replace
destring DIA_PARTO MES_PARTO ANO_PARTO, replace
destring CER_MES CER_ANO, replace
destring EDAD_CANT, replace
destring CURSO_INS, replace
destring ANO_INSCR, replace
destring ANO_PARTO, replace
format %ty ANO_*
destring HIJ_*, replace
destring PESO, replace
destring GESTACION, replace

sum $dyear_var
scalar min_ano_def = r(min)
scalar max_ano_def = r(max)

* String dates to numeric:
gen FECHA_NACIMIENTO_SIF = date(FECHA_NACIMIENTO, "YMD")
format FECHA_NACIMIENTO_SIF %td
order FECHA_NACIMIENTO_SIF, after(FECHA_NACIMIENTO)
local varlabel : variable label FECHA_NACIMIENTO
compress FECHA_NACIMIENTO_SIF
drop FECHA_NACIMIENTO
label var FECHA_NACIMIENTO_SIF "`varlabel' (SIF)"

gen FECHA_DEF_SIF = date(FECHA_DEF, "YMD")
format FECHA_DEF_SIF %td
order FECHA_DEF_SIF, after(FECHA_DEF)
local varlabel : variable label FECHA_DEF
compress FECHA_DEF_SIF
drop FECHA_DEF
label var FECHA_DEF_SIF "`varlabel' (SIF)"

gen FECHA_PARTO_SIF = date(FECHA_PARTO, "YMD")
format FECHA_PARTO_SIF %td
order FECHA_PARTO_SIF, after(FECHA_PARTO)
local varlabel : variable label FECHA_PARTO
compress FECHA_PARTO_SIF
drop FECHA_PARTO
label var FECHA_PARTO_SIF "`varlabel' (SIF)"

compress

*-------------------------------------------------
* Encode variables and remove their glosas...
*-------------------------------------------------

* SEXO:
destring SEXO, replace
labmask SEXO, values(GLOSA_SEXO)
drop GLOSA_SEXO

* EDAD_TIPO:
destring EDAD_TIPO , replace
labmask EDAD_TIPO, values(GLOSA_EDAD_TIPO)
drop GLOSA_EDAD_TIPO

* EST_CIVIL:
destring EST_CIVIL, replace
labmask EST_CIVIL, values(GLOSA_EST_CIVIL)
drop GLOSA_EST_CIVIL

* NIVEL_INS:
destring NIVEL_INS, replace
labmask NIVEL_INS, values(GLOSA_NIVEL_INS)
drop GLOSA_NIVEL_INS

* ACTIVIDAD:
destring ACTIVIDAD, replace
labmask ACTIVIDAD, values(GLOSA_ACTIVIDAD)
drop GLOSA_ACTIVIDAD

* OCUPACION:
* Pendiente...


* CATEGORIA:
* Pendiente...


* LOCAL_DEF:
destring LOCAL_DEF, replace
labmask LOCAL_DEF, values(GLOSA_LOCAL_DEF)
drop GLOSA_LOCAL_DEF

* REG_RES:
destring REG_RES, replace
labmask REG_RES, values(GLOSA_REG_RES)
drop GLOSA_REG_RES

* SERV_RES:
destring SERV_RES, replace
labmask SERV_RES, values(GLOSA_SERV_RES)
drop GLOSA_SERV_RES

* COMUNA:
destring COMUNA, replace
labmask COMUNA, values(GLOSA_COMUNA_RESIDENCIA)
drop GLOSA_COMUNA_RESIDENCIA

* URBANO_RURAL:
destring URBANO_RURAL, replace
label def URBANO_RURAL 1 "Urbano" 2 "Rural"
label val URBANO_RURAL URBANO_RURAL

*----------------------------------------
* DIAG1 y GLOSA_SUBCATEGORIA_DIAG1:
*----------------------------------------
* encode original into new numeric variable (and organize right after original):
encode DIAG1, gen(_DIAG1)
order _DIAG1, after(DIAG1)
compress _DIAG1

* store original variable label in a local macro:
local varlabel : variable label DIAG1

* store list of notes of original label in local macros:
local char_list : char DIAG1[]
foreach c of local char_list {
	local DIAG1_`c' : char DIAG1[`c']
	display "`DIAG1_`c''"
}

* drop original:
drop DIAG1

* rename copy as original and apply variable label:
rename _DIAG1 DIAG1
label var DIAG1 "`varlabel'"

* reapply notes:
foreach c of local char_list {
	if real("`DIAG1_`c''") == . {
		notes DIAG1: `DIAG1_`c''
	}
}

* create copy of numeric variable as numeric glosa:
gen _GLOSA_SUBCATEGORIA_DIAG1 = DIAG1
order _GLOSA_SUBCATEGORIA_DIAG1, after(GLOSA_SUBCATEGORIA_DIAG1)
compress _GLOSA_SUBCATEGORIA_DIAG1

* store original variable label in a local macro:
local varlabel : variable label GLOSA_SUBCATEGORIA_DIAG1

* store list of notes of original label in local macros:
local char_list : char GLOSA_SUBCATEGORIA_DIAG1[]
foreach c of local char_list {
	local GLOSA_SUBCATEGORIA_DIAG1_`c' : char GLOSA_SUBCATEGORIA_DIAG1[`c']
	display "`GLOSA_SUBCATEGORIA_DIAG1_`c''"
}

* remove blanks from original glosa:
replace GLOSA_SUBCATEGORIA_DIAG1 = ustrtrim(stritrim(GLOSA_SUBCATEGORIA_DIAG1))

* assign values in string glosa as value labels to numeric glosa:
labmask _GLOSA_SUBCATEGORIA_DIAG1, values(GLOSA_SUBCATEGORIA_DIAG1) // very long process more than 30m on a i7 machine

* drop original:
drop GLOSA_SUBCATEGORIA_DIAG1

* rename copy as original and apply variable label:
rename _GLOSA_SUBCATEGORIA_DIAG1 GLOSA_SUBCATEGORIA_DIAG1
label var GLOSA_SUBCATEGORIA_DIAG1 "`varlabel'"

* reapply notes:
foreach c of local char_list {
	if real("`GLOSA_SUBCATEGORIA_DIAG1_`c''") == . {
		notes GLOSA_SUBCATEGORIA_DIAG1: `GLOSA_SUBCATEGORIA_DIAG1_`c''
	}
}

*------------------------------------------------
* CODIGO_CATEGORIA_DIAG1 y GLOSA_CATEGORIA_DIAG1:
*------------------------------------------------

* encode original into new numeric variable (and organize right after original):
encode CODIGO_CATEGORIA_DIAG1, gen(_CODIGO_CATEGORIA_DIAG1)
order _CODIGO_CATEGORIA_DIAG1, after(CODIGO_CATEGORIA_DIAG1)
compress _CODIGO_CATEGORIA_DIAG1

* store original variable label in a local macro:
local varlabel : variable label CODIGO_CATEGORIA_DIAG1

* store list of notes of original label in local macros:
local char_list : char CODIGO_CATEGORIA_DIAG1[]
foreach c of local char_list {
	local CODIGO_CATEGORIA_DIAG1_`c' : char CODIGO_CATEGORIA_DIAG1[`c']
	display "`CODIGO_CATEGORIA_DIAG1_`c''"
}

* drop original:
drop CODIGO_CATEGORIA_DIAG1

* rename copy as original and apply variable label:
rename _CODIGO_CATEGORIA_DIAG1 CODIGO_CATEGORIA_DIAG1
label var CODIGO_CATEGORIA_DIAG1 "`varlabel'"

* reapply notes:
foreach c of local char_list {
	if real("`CODIGO_CATEGORIA_DIAG1_`c''") == . {
		notes CODIGO_CATEGORIA_DIAG1: `CODIGO_CATEGORIA_DIAG1_`c''
	}
}

* create copy of numeric variable as numeric glosa:
gen _GLOSA_CATEGORIA_DIAG1 = CODIGO_CATEGORIA_DIAG1
order _GLOSA_CATEGORIA_DIAG1, after(GLOSA_CATEGORIA_DIAG1)
compress _GLOSA_CATEGORIA_DIAG1

* store original variable label in a local macro:
local varlabel : variable label GLOSA_CATEGORIA_DIAG1

* store list of notes of original label in local macros:
local char_list : char GLOSA_CATEGORIA_DIAG1[]
foreach c of local char_list {
	local GLOSA_CATEGORIA_DIAG1_`c' : char GLOSA_CATEGORIA_DIAG1[`c']
	display "`GLOSA_CATEGORIA_DIAG1_`c''"
}

* remove blanks from original glosa:
replace GLOSA_CATEGORIA_DIAG1 = ustrtrim(stritrim(GLOSA_CATEGORIA_DIAG1))

* assign values in string glosa as value labels to numeric glosa:
labmask _GLOSA_CATEGORIA_DIAG1, values(GLOSA_CATEGORIA_DIAG1)

* drop original:
drop GLOSA_CATEGORIA_DIAG1

* rename copy as original and apply variable label:
rename _GLOSA_CATEGORIA_DIAG1 GLOSA_CATEGORIA_DIAG1
label var GLOSA_CATEGORIA_DIAG1 "`varlabel'"

* reapply notes:
foreach c of local char_list {
	if real("`GLOSA_CATEGORIA_DIAG1_`c''") == . {
		notes GLOSA_CATEGORIA_DIAG1: `GLOSA_CATEGORIA_DIAG1_`c''
	}
}

*----------------------------------------
* CODIGO_GRUPO_DIAG1 y GLOSA_GRUPO_DIAG1:
*----------------------------------------
* encode original into new numeric variable (and organize right after original):
encode CODIGO_GRUPO_DIAG1, gen(_CODIGO_GRUPO_DIAG1)
order _CODIGO_GRUPO_DIAG1, after(CODIGO_GRUPO_DIAG1)
compress _CODIGO_GRUPO_DIAG1

* store original variable label in a local macro:
local varlabel : variable label CODIGO_GRUPO_DIAG1

* store list of notes of original label in local macros:
local char_list : char CODIGO_GRUPO_DIAG1[]
foreach c of local char_list {
	local CODIGO_GRUPO_DIAG1_`c' : char CODIGO_GRUPO_DIAG1[`c']
	display "`CODIGO_GRUPO_DIAG1_`c''"
}

* drop original:
drop CODIGO_GRUPO_DIAG1

* rename copy as original and apply variable label:
rename _CODIGO_GRUPO_DIAG1 CODIGO_GRUPO_DIAG1
label var CODIGO_GRUPO_DIAG1 "`varlabel'"

* reapply notes:
foreach c of local char_list {
	if real("`CODIGO_GRUPO_DIAG1_`c''") == . {
		notes CODIGO_GRUPO_DIAG1: `CODIGO_GRUPO_DIAG1_`c''
	}
}

* create copy of numeric variable as numeric glosa:
gen _GLOSA_GRUPO_DIAG1 = CODIGO_GRUPO_DIAG1
order _GLOSA_GRUPO_DIAG1, after(GLOSA_GRUPO_DIAG1)
compress _GLOSA_GRUPO_DIAG1

* store original variable label in a local macro:
local varlabel : variable label GLOSA_GRUPO_DIAG1

* store list of notes of original label in local macros:
local char_list : char GLOSA_GRUPO_DIAG1[]
foreach c of local char_list {
	local GLOSA_GRUPO_DIAG1_`c' : char GLOSA_GRUPO_DIAG1[`c']
	display "`GLOSA_GRUPO_DIAG1_`c''"
}

* remove blanks from original glosa:
replace GLOSA_GRUPO_DIAG1 = ustrtrim(stritrim(GLOSA_GRUPO_DIAG1))

* assign values in string glosa as value labels to numeric glosa:
labmask _GLOSA_GRUPO_DIAG1, values(GLOSA_GRUPO_DIAG1)

* drop original:
drop GLOSA_GRUPO_DIAG1

* rename copy as original and apply variable label:
rename _GLOSA_GRUPO_DIAG1 GLOSA_GRUPO_DIAG1
label var GLOSA_GRUPO_DIAG1 "`varlabel'"

* reapply notes:
foreach c of local char_list {
	if real("`GLOSA_GRUPO_DIAG1_`c''") == . {
		notes GLOSA_GRUPO_DIAG1: `GLOSA_GRUPO_DIAG1_`c''
	}
}

*----------------------------------------
* CAPITULO_DIAG1 y GLOSA_CAPITULO_DIAG1:
*----------------------------------------
* encode original into new numeric variable (and organize right after original):
encode CAPITULO_DIAG1, gen(_CAPITULO_DIAG1)
order _CAPITULO_DIAG1, after(CAPITULO_DIAG1)
compress _CAPITULO_DIAG1

* store original variable label in a local macro:
local varlabel : variable label CAPITULO_DIAG1

* store list of notes of original label in local macros:
local char_list : char CAPITULO_DIAG1[]
foreach c of local char_list {
	local CAPITULO_DIAG1_`c' : char CAPITULO_DIAG1[`c']
	display "`CAPITULO_DIAG1_`c''"
}

* drop original:
drop CAPITULO_DIAG1

* rename copy as original and apply variable label:
rename _CAPITULO_DIAG1 CAPITULO_DIAG1
label var CAPITULO_DIAG1 "`varlabel'"

* reapply notes:
foreach c of local char_list {
	if real("`CAPITULO_DIAG1_`c''") == . {
		notes CAPITULO_DIAG1: `CAPITULO_DIAG1_`c''
	}
}

* create copy of numeric variable as numeric glosa:
gen _GLOSA_CAPITULO_DIAG1 = CAPITULO_DIAG1
order _GLOSA_CAPITULO_DIAG1, after(GLOSA_CAPITULO_DIAG1)
compress _GLOSA_CAPITULO_DIAG1

* store original variable label in a local macro:
local varlabel : variable label GLOSA_CAPITULO_DIAG1

* store list of notes of original label in local macros:
local char_list : char GLOSA_CAPITULO_DIAG1[]
foreach c of local char_list {
	local GLOSA_CAPITULO_DIAG1_`c' : char GLOSA_CAPITULO_DIAG1[`c']
	display "`GLOSA_CAPITULO_DIAG1_`c''"
}

* remove blanks from original glosa:
replace GLOSA_CAPITULO_DIAG1 = ustrtrim(stritrim(GLOSA_CAPITULO_DIAG1))

* assign values in string glosa as value labels to numeric glosa:
labmask _GLOSA_CAPITULO_DIAG1, values(GLOSA_CAPITULO_DIAG1)

* drop original:
drop GLOSA_CAPITULO_DIAG1

* rename copy as original and apply variable label:
rename _GLOSA_CAPITULO_DIAG1 GLOSA_CAPITULO_DIAG1
label var GLOSA_CAPITULO_DIAG1 "`varlabel'"

* reapply notes:
foreach c of local char_list {
	if real("`GLOSA_CAPITULO_DIAG1_`c''") == . {
		notes GLOSA_CAPITULO_DIAG1: `GLOSA_CAPITULO_DIAG1_`c''
	}
}

*----------------------------------------
* DIAG2 y GLOSA_SUBCATEGORIA_DIAG2:
*----------------------------------------
* encode original into new numeric variable (and organize right after original):
encode DIAG2, gen(_DIAG2)
order _DIAG2, after(DIAG2)
compress _DIAG2

* store original variable label in a local macro:
local varlabel : variable label DIAG2

* store list of notes of original label in local macros:
local char_list : char DIAG2[]
foreach c of local char_list {
	local DIAG2_`c' : char DIAG2[`c']
	display "`DIAG2_`c''"
}

* drop original:
drop DIAG2

* rename copy as original and apply variable label:
rename _DIAG2 DIAG2
label var DIAG2 "`varlabel'"

* reapply notes:
foreach c of local char_list {
	if real("`DIAG2_`c''") == . {
		notes DIAG2: `DIAG2_`c''
	}
}

* create copy of numeric variable as numeric glosa:
gen _GLOSA_SUBCATEGORIA_DIAG2 = DIAG2
order _GLOSA_SUBCATEGORIA_DIAG2, after(GLOSA_SUBCATEGORIA_DIAG2)
compress _GLOSA_SUBCATEGORIA_DIAG2

* store original variable label in a local macro:
local varlabel : variable label GLOSA_SUBCATEGORIA_DIAG2

* store list of notes of original label in local macros:
local char_list : char GLOSA_SUBCATEGORIA_DIAG2[]
foreach c of local char_list {
	local GLOSA_SUBCATEGORIA_DIAG2_`c' : char GLOSA_SUBCATEGORIA_DIAG2[`c']
	display "`GLOSA_SUBCATEGORIA_DIAG2_`c''"
}

* remove blanks from original glosa:
replace GLOSA_SUBCATEGORIA_DIAG2 = ustrtrim(stritrim(GLOSA_SUBCATEGORIA_DIAG2))

* assign values in string glosa as value labels to numeric glosa:
labmask _GLOSA_SUBCATEGORIA_DIAG2, values(GLOSA_SUBCATEGORIA_DIAG2) // very long process more than 30m on a i7 machine

* drop original:
drop GLOSA_SUBCATEGORIA_DIAG2

* rename copy as original and apply variable label:
rename _GLOSA_SUBCATEGORIA_DIAG2 GLOSA_SUBCATEGORIA_DIAG2
label var GLOSA_SUBCATEGORIA_DIAG2 "`varlabel'"

* reapply notes:
foreach c of local char_list {
	if real("`GLOSA_SUBCATEGORIA_DIAG2_`c''") == . {
		notes GLOSA_SUBCATEGORIA_DIAG2: `GLOSA_SUBCATEGORIA_DIAG2_`c''
	}
}

*------------------------------------------------
* CODIGO_CATEGORIA_DIAG2 y GLOSA_CATEGORIA_DIAG2:
*------------------------------------------------
* encode original into new numeric variable (and organize right after original):
encode CODIGO_CATEGORIA_DIAG2, gen(_CODIGO_CATEGORIA_DIAG2)
order _CODIGO_CATEGORIA_DIAG2, after(CODIGO_CATEGORIA_DIAG2)
compress _CODIGO_CATEGORIA_DIAG2

* store original variable label in a local macro:
local varlabel : variable label CODIGO_CATEGORIA_DIAG2

* store list of notes of original label in local macros:
local char_list : char CODIGO_CATEGORIA_DIAG2[]
foreach c of local char_list {
	local CODIGO_CATEGORIA_DIAG2_`c' : char CODIGO_CATEGORIA_DIAG2[`c']
	display "`CODIGO_CATEGORIA_DIAG2_`c''"
}

* drop original:
drop CODIGO_CATEGORIA_DIAG2

* rename copy as original and apply variable label:
rename _CODIGO_CATEGORIA_DIAG2 CODIGO_CATEGORIA_DIAG2
label var CODIGO_CATEGORIA_DIAG2 "`varlabel'"

* reapply notes:
foreach c of local char_list {
	if real("`CODIGO_CATEGORIA_DIAG2_`c''") == . {
		notes CODIGO_CATEGORIA_DIAG2: `CODIGO_CATEGORIA_DIAG2_`c''
	}
}

* create copy of numeric variable as numeric glosa:
gen _GLOSA_CATEGORIA_DIAG2 = CODIGO_CATEGORIA_DIAG2
order _GLOSA_CATEGORIA_DIAG2, after(GLOSA_CATEGORIA_DIAG2)
compress _GLOSA_CATEGORIA_DIAG2

* store original variable label in a local macro:
local varlabel : variable label GLOSA_CATEGORIA_DIAG2

* store list of notes of original label in local macros:
local char_list : char GLOSA_CATEGORIA_DIAG2[]
foreach c of local char_list {
	local GLOSA_CATEGORIA_DIAG2_`c' : char GLOSA_CATEGORIA_DIAG2[`c']
	display "`GLOSA_CATEGORIA_DIAG2_`c''"
}

* remove blanks from original glosa:
replace GLOSA_CATEGORIA_DIAG2 = ustrtrim(stritrim(GLOSA_CATEGORIA_DIAG2))

* assign values in string glosa as value labels to numeric glosa:
labmask _GLOSA_CATEGORIA_DIAG2, values(GLOSA_CATEGORIA_DIAG2)

* drop original:
drop GLOSA_CATEGORIA_DIAG2

* rename copy as original and apply variable label:
rename _GLOSA_CATEGORIA_DIAG2 GLOSA_CATEGORIA_DIAG2
label var GLOSA_CATEGORIA_DIAG2 "`varlabel'"

* reapply notes:
foreach c of local char_list {
	if real("`GLOSA_CATEGORIA_DIAG2_`c''") == . {
		notes GLOSA_CATEGORIA_DIAG2: `GLOSA_CATEGORIA_DIAG2_`c''
	}
}

*------------------------------------------------
* CODIGO_GRUPO_DIAG2 y GLOSA_GRUPO_DIAG2:
*------------------------------------------------
* encode original into new numeric variable (and organize right after original):
encode CODIGO_GRUPO_DIAG2, gen(_CODIGO_GRUPO_DIAG2)
order _CODIGO_GRUPO_DIAG2, after(CODIGO_GRUPO_DIAG2)
compress _CODIGO_GRUPO_DIAG2

* store original variable label in a local macro:
local varlabel : variable label CODIGO_GRUPO_DIAG2

* store list of notes of original label in local macros:
local char_list : char CODIGO_GRUPO_DIAG2[]
foreach c of local char_list {
	local CODIGO_GRUPO_DIAG2_`c' : char CODIGO_GRUPO_DIAG2[`c']
	display "`CODIGO_GRUPO_DIAG2_`c''"
}

* drop original:
drop CODIGO_GRUPO_DIAG2

* rename copy as original and apply variable label:
rename _CODIGO_GRUPO_DIAG2 CODIGO_GRUPO_DIAG2
label var CODIGO_GRUPO_DIAG2 "`varlabel'"

* reapply notes:
foreach c of local char_list {
	if real("`CODIGO_GRUPO_DIAG2_`c''") == . {
		notes CODIGO_GRUPO_DIAG2: `CODIGO_GRUPO_DIAG2_`c''
	}
}

* create copy of numeric variable as numeric glosa:
gen _GLOSA_GRUPO_DIAG2 = CODIGO_GRUPO_DIAG2
order _GLOSA_GRUPO_DIAG2, after(GLOSA_GRUPO_DIAG2)
compress _GLOSA_GRUPO_DIAG2

* store original variable label in a local macro:
local varlabel : variable label GLOSA_GRUPO_DIAG2

* store list of notes of original label in local macros:
local char_list : char GLOSA_GRUPO_DIAG2[]
foreach c of local char_list {
	local GLOSA_GRUPO_DIAG2_`c' : char GLOSA_GRUPO_DIAG2[`c']
	display "`GLOSA_GRUPO_DIAG2_`c''"
}

* remove blanks from original glosa:
replace GLOSA_GRUPO_DIAG2 = ustrtrim(stritrim(GLOSA_GRUPO_DIAG2))

* assign values in string glosa as value labels to numeric glosa:
labmask _GLOSA_GRUPO_DIAG2, values(GLOSA_GRUPO_DIAG2)

* drop original:
drop GLOSA_GRUPO_DIAG2

* rename copy as original and apply variable label:
rename _GLOSA_GRUPO_DIAG2 GLOSA_GRUPO_DIAG2
label var GLOSA_GRUPO_DIAG2 "`varlabel'"

* reapply notes:
foreach c of local char_list {
	if real("`GLOSA_GRUPO_DIAG2_`c''") == . {
		notes GLOSA_GRUPO_DIAG2: `GLOSA_GRUPO_DIAG2_`c''
	}
}

*------------------------------------------------
* CAPITULO_DIAG2 y GLOSA_CAPITULO_DIAG2:
*------------------------------------------------
* encode original into new numeric variable (and organize right after original):
encode CAPITULO_DIAG2, gen(_CAPITULO_DIAG2)
order _CAPITULO_DIAG2, after(CAPITULO_DIAG2)
compress _CAPITULO_DIAG2

* store original variable label in a local macro:
local varlabel : variable label CAPITULO_DIAG2

* store list of notes of original label in local macros:
local char_list : char CAPITULO_DIAG2[]
foreach c of local char_list {
	local CAPITULO_DIAG2_`c' : char CAPITULO_DIAG2[`c']
	display "`CAPITULO_DIAG2_`c''"
}

* drop original:
drop CAPITULO_DIAG2

* rename copy as original and apply variable label:
rename _CAPITULO_DIAG2 CAPITULO_DIAG2
label var CAPITULO_DIAG2 "`varlabel'"

* reapply notes:
foreach c of local char_list {
	if real("`CAPITULO_DIAG2_`c''") == . {
		notes CAPITULO_DIAG2: `CAPITULO_DIAG2_`c''
	}
}

* create copy of numeric variable as numeric glosa:
gen _GLOSA_CAPITULO_DIAG2 = CAPITULO_DIAG2
order _GLOSA_CAPITULO_DIAG2, after(GLOSA_CAPITULO_DIAG2)
compress _GLOSA_CAPITULO_DIAG2

* store original variable label in a local macro:
local varlabel : variable label GLOSA_CAPITULO_DIAG2

* store list of notes of original label in local macros:
local char_list : char GLOSA_CAPITULO_DIAG2[]
foreach c of local char_list {
	local GLOSA_CAPITULO_DIAG2_`c' : char GLOSA_CAPITULO_DIAG2[`c']
	display "`GLOSA_CAPITULO_DIAG2_`c''"
}

* remove blanks from original glosa:
replace GLOSA_CAPITULO_DIAG2 = ustrtrim(stritrim(GLOSA_CAPITULO_DIAG2))

* assign values in string glosa as value labels to numeric glosa:
labmask _GLOSA_CAPITULO_DIAG2, values(GLOSA_CAPITULO_DIAG2)

* drop original:
drop GLOSA_CAPITULO_DIAG2

* rename copy as original and apply variable label:
rename _GLOSA_CAPITULO_DIAG2 GLOSA_CAPITULO_DIAG2
label var GLOSA_CAPITULO_DIAG2 "`varlabel'"

* reapply notes:
foreach c of local char_list {
	if real("`GLOSA_CAPITULO_DIAG2_`c''") == . {
		notes GLOSA_CAPITULO_DIAG2: `GLOSA_CAPITULO_DIAG2_`c''
	}
}

*------------------------------------------------
* OTHERS 
*------------------------------------------------

* AT_MEDICA:
destring AT_MEDICA, replace
labmask AT_MEDICA, values(GLOSA_AT_MEDICA)
drop GLOSA_AT_MEDICA

* CAL_MEDICO:
destring CAL_MEDICO, replace
labmask CAL_MEDICO, values(GLOSA_CAL_MEDICO)
drop GLOSA_CAL_MEDICO

* FUND_CAUSA:
destring FUND_CAUSA, replace
labmask FUND_CAUSA, values(GLOSA_FUND_CAUSA)
drop GLOSA_FUND_CAUSA

* COD_MENOR:
* Pendiente... (inconsistencies with GLOSA)


* NUTRITIVO:
destring NUTRITIVO, replace
labmask NUTRITIVO, values(GLOSA_NUTRITIVO)
drop GLOSA_NUTRITIVO

* EST_CIV_MADRE:
destring EST_CIV_MADRE, replace
labmask EST_CIV_MADRE, values(GLOSA_EST_CIV_MADRE)
drop GLOSA_EST_CIV_MADRE

* ACTIV_MADRE:
destring ACTIV_MADRE, replace
labmask ACTIV_MADRE, values(GLOSA_ACTIV_MADRE)
drop GLOSA_ACTIV_MADRE

* OCUPA_MADRE:
* Pending...


* CATEG_MADRE:
* Pending...


* NIVEL_MADRE:
destring NIVEL_MADRE, replace
labmask NIVEL_MADRE, values(GLOSA_NIVEL_MADRE)
drop GLOSA_NIVEL_MADRE

* PARTO_ABORTO:
destring PARTO_ABORTO, replace
labmask PARTO_ABORTO, values(GLOSA_PARTO_ABORTO)
drop GLOSA_PARTO_ABORTO

* ACTIV_PADRE:
destring ACTIV_PADRE, replace
labmask ACTIV_PADRE, values(GLOSA_ACTIV_PADRE)
drop GLOSA_ACTIV_PADRE

* OCUPA_PADRE:
* Pending...


* CATEG_PADRE:
* Pending...


* NIVEL_PADRE:
destring NIVEL_PADRE, replace
labmask NIVEL_PADRE, values(GLOSA_NIVEL_PADRE)
drop GLOSA_NIVEL_PADRE

*-------------------------------------------------
/* FINAL THINGS */
*-------------------------------------------------

* Compress, label, and metadata:
compress
label data "Defunciones `=min_ano_def'-`=max_ano_def' en Chile (DEIS/MINSAL) (sin glosas)"
notes drop _dta
note: Last modified by: $id_user_full ($id_user_email)
note: Last modification timestamp: $S_DATE at $S_TIME
note: Fuente: https://deis.minsal.cl/#datosabiertos

* Save file:
* save "${def_original}_NOGLOSAS.dta", replace

* Save labels to do file:
* label save using "$dodir/(auto)labels_${def_original}.do", replace

* Final report:
cls
describe, fullnames
notes _dta

*-------------------------------------------------------------------------------
*--- 3. Removing NAs and others. 
*-------------------------------------------------------------------------------

* Get minimum and maximum death years:
sum $dyear_var
scalar min_ano_def = r(min)
scalar max_ano_def = r(max)

* Drop exact duplicates:
duplicates drop

* Drop births with NA IDs:
drop if ID_FALLECIDO == "NA"

* Drop missing IDs:
drop if ID_FALLECIDO == ""

* Drop duplicates in terms of ID:
duplicates tag ID_FALLECIDO, gen(dups_IDF)
drop if dups_IDF > 0
drop dups_IDF

* Compress, label, and save:
compress
label data "Defunciones `=min_ano_def'-`=max_ano_def' en Chile (DEIS/MINSAL), Sin Glosas, Sin Duplicados, Sin NAs"
save "${def_original}_NOGLOSAS_NODUPS_NONAS.dta", replace


* Erase unnecessary files 
erase "${def_original}.dta"
